package com.jv;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory;

/**
 * 如果有多个数据源，可以配置认证authenticationStrategy（认证策略）
 *
 * AtLeastOneSuccessfulStrategy：如果有一个（或更多）Realm 验证成功，则验证成功。
 *
 * FirstSuccessfulStrategy：如果第一个 Realm 验证成功，则返回成功，不继续验证。
 *
 *  AllSucessfulStrategy：所有配置的 Realm 验证成功，则成功。
 */
public class TestB {
    public static void main(String[] args) {

        //[1]解析shiro.ini文件
        Factory<SecurityManager> factory =new IniSecurityManagerFactory("classpath:shiro-jdbc2.ini");

        //[2]通过SecurityManager工厂获得SecurityManager实例
        SecurityManager securityManager = factory.getInstance();

        //[3]把SecurityManager对象设置到运行环境中
        SecurityUtils.setSecurityManager(securityManager);

        //[4]通过SecurityUtils获得主体subject
        Subject subject = SecurityUtils.getSubject();

        //[5]书写自己输入的账号和密码---相当于用户自己输入的账号和密码
        UsernamePasswordToken token =new UsernamePasswordToken("heizi","123");
        try {
            //[6]进行身份的验证

            subject.login(token);

            //[7]通过方法判断是否登录成功

            if(subject.isAuthenticated()){
                System.out.println("登录成功");

            }
        } catch (IncorrectCredentialsException e) {

            System.out.println("登录失败");


        }catch (UnknownAccountException e){

            System.out.println("用户名不正确");
        }
    }
}
